<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>The async Example Application - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level2"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level2"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level3"><a href="gkkqg.html">Asynchronous Method Invocation</a></p>
<p class="toc level4"><a href="gkkqg.html#gkifj">Creating an Asynchronous Business Method</a></p>
<p class="toc level4"><a href="gkkqg.html#gkiem">Calling Asynchronous Methods from Enterprise Bean Clients</a></p>
<p class="toc level5"><a href="gkkqg.html#gkicm">Retrieving the Final Result from an Asynchronous Method Invocation</a></p>
<p class="toc level5"><a href="gkkqg.html#gkidb">Cancelling an Asynchronous Method Invocation</a></p>
<p class="toc level5"><a href="gkkqg.html#gkiev">Checking the Status of an Asynchronous Method Invocation</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3 tocsp"><a href="">The <tt>async</tt> Example Application</a></p>
<p class="toc level4"><a href="#gkiqj">Architecture of the <tt>async</tt> Example Application</a></p>
<p class="toc level4"><a href="#gkirq">Configuring the Keystore and Truststore in GlassFish Server</a></p>
<p class="toc level4"><a href="#gkinw">Running the <tt>async</tt> Example Application in NetBeans IDE</a></p>
<p class="toc level4"><a href="#gkrfb">Running the <tt>async</tt> Example Application Using Ant</a></p>
</div>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<p class="toc level2"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level2"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="gkkqg.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="gjbnr.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="gkiez"></a><h2>The <tt>async</tt> Example Application</h2>
<a name="indexterm-1520"></a><a name="indexterm-1521"></a><p>The <tt>async</tt> example demonstrates how to define an asynchronous business method on a
session bean, and call it from a web client. The <tt>MailerBean</tt> stateless
session bean defines an asynchronous method, <tt>sendMessage</tt>, which uses the JavaMail API to
send an email to a specified email address.</p>


<hr><p><b>Note - </b>This example needs to be configured for your environment before it runs correctly,
and requires access to an SMTPS server.</p>


<hr>


<a name="gkiqj"></a><h3>Architecture of the <tt>async</tt> Example Application</h3>
<p>The <tt>async</tt> application consists of a single stateless session bean, <tt>MailerBean</tt>, and a
JavaServer Faces web application front-end that uses Facelets tags in XHTML files to
display a form for users to enter the email address for the recipient
of an email. The status of the email is updated when the email
is finally sent.</p>

<p>The <tt>MailerBean</tt> session bean injects a JavaMail resource used to send an
email message to an address specified by the user. The message is created,
modified, and sent using the JavaMail API. The injected JavaMail resource is configured
through the GlassFish Server Administration Console, or through a resource configuration file packaged
with the application. The resource configuration can be modified at runtime by GlassFish
Server administrator to use a different mail server or transport protocol.</p>

<pre>@Asynchronous
public Future&lt;String> sendMessage(String email) {
    String status;
    try {
        Message message = new MimeMessage(session);
        message.setFrom();
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(email, false));
        message.setSubject("Test message from async example");
        message.setHeader("X-Mailer", "JavaMail");
        DateFormat dateFormatter = DateFormat
                .getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT);
        Date timeStamp = new Date();
        String messageBody = "This is a test message from the async example "
                + "of the Java EE Tutorial. It was sent on "
                + dateFormatter.format(timeStamp)
                + ".";
        message.setText(messageBody);
        message.setSentDate(timeStamp);
        Transport.send(message);
        status = "Sent";
        logger.log(Level.INFO, "Mail sent to {0}", email);
    } catch (MessagingException ex) {
        logger.severe("Error in sending message.");
        status = "Encountered an error";
        logger.severe(ex.getMessage() + ex.getNextException().getMessage());
        logger.severe(ex.getCause().getMessage());
    }
    return new AsyncResult&lt;String>(status);
}</pre><p>The web client consists of a Facelets template, <tt>template.xhtml</tt>, two Facelets clients, <tt>index.xhtml</tt>
and <tt>response.xhtml</tt>, and a JavaServer Faces managed bean, <tt>MailerManagedBean</tt>. The <tt>index.xhtml</tt> file contains
a form for the target email address. When the user submits the form,
the <tt>MailerManagedBean.send</tt> method is called. This method uses an injected instance of the
<tt>MailerBean</tt> session bean to call <tt>MailerBean.sendMessage</tt>. The result is sent to the <tt>response.xhtml</tt> Facelets
view.</p>



<a name="gkirq"></a><h3>Configuring the Keystore and Truststore in GlassFish Server</h3><p>The GlassFish Server domain needs to be configured with the server's master password
to access the keystore and truststore used to initiate secure communications using the
SMTPS transport protocol.</p>

<ol>
<li><b>Open the GlassFish Server Administration Console in a web browser at <tt>http://localhost:4848</tt>.</b></li>
<li><b>Expand Configurations, then expand server-config, then click JVM Settings.</b></li>
<li><b>Click JVM Options, then click Add JVM Option and enter <tt>-Djavax.net.ssl.keyStorePassword=<i>master password</i></tt>, replacing
<tt><i>master password</i> with the keystore master password</tt>. The default master password is <tt>changeit</tt>.</b></li>
<li><b>Click Add JVM Option and enter <tt>-Djavax.net.ssl.trustStorePassword=<i>master password</i></tt>, replacing <tt><i>master password</i> with the truststore master password</tt>. The default master password
is <tt>changeit</tt>.</b></li>
<li><b>Click Save, then restart GlassFish Server.</b></li></ol>

<a name="gkinw"></a><h3>Running the <tt>async</tt> Example Application in NetBeans IDE</h3><p>Follow these instructions for running the <tt>async</tt> example application in NetBeans IDE.</p>

<p><b>Before You Begin</b></p><p>Before running this example, you must configure your GlassFish Server instance to access
the keystore and truststore used by GlassFish Server to create a secure connection
to the target SMTPS server.</p>

<ol>
<li><b>From the File menu, choose Open Project.</b></li>
<li><b>In the Open Project dialog, navigate to:</b><pre><tt></tt><i>tut-install</i><tt>/examples/ejb/</tt></pre></li>
<li><b>Select the <tt>async</tt> folder and click Open Project.</b></li>
<li><b>Under <tt>async</tt> in the project pane, expand the Server Resources node and double-click
<tt>glassfish-resources.xml</tt>.</b></li>
<li><b>Enter the configuration settings for your SMTPS server in <tt>glassfish-resources.xml</tt>.</b><p>The SMTPS server host name is set in the <tt>host</tt> attribute, email address
from which you want the message sent is the <tt>from</tt> attribute, the SMTPS
user name is the <tt>user</tt> attribute. Set the <tt>mail-smtps-password</tt> property value to
the password for the SMTPS server user. The following code snippet shows an
example resource configuration. Lines in bold need to be modified.</p><pre>&lt;resources>
    &lt;mail-resource debug="false" 
            enabled="true" 
            <b>from="user@example.com"</b> 
            <b>host="smtp.example.com"</b> 
            jndi-name="mail/myExampleSession" 
            object-type="user" store-protocol="imap" 
            store-protocol-class="com.sun.mail.imap.IMAPStore" 
            transport-protocol="smtps" 
            transport-protocol-class="com.sun.mail.smtp.SMTPSSLTransport" 
            <b>user="user@example.com"</b>>
        &lt;description/>
        &lt;property name="mail-smtps-auth" value="true"/>
        &lt;property name="mail-smtps-password" <b>value="mypassword"</b>/>
    &lt;/mail-resource>
&lt;/resources></pre></li>
<li><b>Right-click <tt>async</tt> in the project pane and select Run.</b><p>This will compile, assemble, and deploy the application, and start a web browser
at the following URL: <tt>http://localhost:8080/async</tt>.</p></li>
<li><b>In the web browser window, enter the email to which you want
the test message sent and click Send email.</b><p>If your configuration settings are correct, a test email will be sent, and
the status message will read <tt>Sent</tt> in the web client. The test message
should appear momentarily in the inbox of the recipient.</p><p>If an error occurs, the status will read <tt>Encountered an error</tt>. Check the <tt>server.log</tt> file
for your domain to find the cause of the error.</p></li></ol>

<a name="gkrfb"></a><h3>Running the <tt>async</tt> Example Application Using Ant</h3><p>Follow these instructions for running the <tt>async</tt> example application using Ant.</p>

<ol>
<li><b>In a terminal window, navigate to <tt></tt><i>tut-install</i><tt>/examples/ejb/async/</tt>.</b></li>
<li><b>In a text editor, open <tt>setup/glassfish-resources.xml</tt> and enter the configuration settings for your
SMTPS server.</b><p>The SMTPS server host name is set in the <tt>host</tt> attribute, email address from
which you want the message sent is the <tt>from</tt> attribute, the SMTPS user
name is the <tt>user</tt> attribute. Set the <tt>mail-smtps-password</tt> property value to the
password for the SMTPS server user. The following code snippet shows an example
resource configuration. Lines in bold need to be modified.</p><pre>&lt;resources>
    &lt;mail-resource debug="false" 
            enabled="true" 
            <b>from="user@example.com"</b> 
            <b>host="smtp.example.com"</b> 
            jndi-name="mail/myExampleSession" 
            object-type="user" store-protocol="imap" 
            store-protocol-class="com.sun.mail.imap.IMAPStore" 
            transport-protocol="smtps" 
            transport-protocol-class="com.sun.mail.smtp.SMTPSSLTransport" 
            <b>user="user@example.com"</b>>
        &lt;description/>
        &lt;property name="mail-smtps-auth" value="true"/>
        &lt;property name="mail-smtps-password" <b>value="mypassword"</b>/>
    &lt;/mail-resource>
&lt;/resources></pre></li>
<li><b>Enter the following command:</b><pre>ant all</pre><p>This will compile, assemble, and deploy the application, and start a web browser
at the following URL: <tt>http://localhost:8080/async</tt>.</p>
<hr><p><b>Note - </b>If your build system isn't configured to automatically open a web browser, open
the above URL in a browser window.</p>


<hr>
</li>
<li><b>In the web browser window, enter the email to which you want
the test message sent and click Send email.</b><p>If your configuration settings are correct, a test email will be sent, and
the status message will read <tt>Sent</tt> in the web client. The test message
should appear momentarily in the inbox of the recipient.</p><p>If an error occurs, the status will read <tt>Encountered an error</tt>. Check the <tt>server.log</tt> file
for your domain to find the cause of the error.</p></li></ol>
         </div>
         <div class="navigation">
             <a href="gkkqg.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="gjbnr.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

